home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EXEC.SWG / 0028_Finding the end of EXE.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  1KB  |  45 lines

  1. { could be used to append data to the end of an EXE file }
  2.  
  3. Unit ExeEnd;
  4.  
  5. Interface
  6.  
  7. Uses Dos;
  8.  
  9. Var EndOfExe, SizeOfData: LongInt;
  10.     Data: Boolean;
  11.  
  12.   Function GetExeInfo(Const Name: PathStr; var Data: Boolean; var EndOfExe,
  13.     SizeOfData: LongInt): Boolean;
  14.  
  15. Implementation
  16.  
  17. Function GetExeInfo(Const Name: PathStr; var Data: Boolean; var EndOfExe,
  18.   SizeOfData: LongInt): Boolean;
  19. Const CorrectExe=$5A4D; {'MZ'}
  20. Var Header: Array[1..3] of Word; {ID, ByteMod, Pages}
  21.     F: File;
  22.     ReadIn: Word;
  23. Begin
  24.   Data:=False;
  25.   EndOfExe:=0;
  26.   SizeOfData:=0;
  27.   If Name='.' then Exit;
  28.   Assign(F, Name);
  29.   {$I-} Reset(F, 1); {$I+}
  30.   If IOResult=0 then Begin
  31.     BlockRead(F, Header, SizeOf(Header), ReadIn);
  32.     If (ReadIn=SizeOf(Header)) and (Header[1]=CorrectExe) then
  33.       EndOfExe:=LongInt(Header[3]-1)*512+Header[2];
  34.     SizeOfData:=FileSize(F)-EndOfExe;
  35.     Close(F);
  36.     Data:=SizeOfData>0;
  37.     GetExeInfo:=True;
  38.   End Else GetExeInfo:=False;
  39. End;
  40.  
  41. Begin
  42.   If Lo(DosVersion)>=3 then GetExeInfo(ParamStr(0), Data, EndOfExe,
  43.     SizeOfData) Else GetExeInfo('.', Data, EndOfExe, SizeOfData);
  44. End.
  45.